package cn.leelei.spring.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.leelei.spring.action.UserAction;

/**
 * 这种现象就是Spring 的IOC 在操作
 * 
 * @author Nike
 *
 */
public class initSpring {
	/**
	 * 获得getContext()抽取
	 * 
	 * @return
	 */
	private ApplicationContext getContext() {
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		return context;
	}

	/**
	 * 初始化Spring 容器
	 */
	@Test
	public void init() {

		getContext().getClass().getSimpleName();

	}

	/**
	 * 1. 通过 class 类获取bean对象获得 获得beans 底层通过类反射实现的
	 */
	@Test
	public void getbeanClass() {

		UserAction user = getContext().getBean(UserAction.class);
		user.Save();

	}

	/**
	 * 2. 通过名字获取bean 由于返回的是Object类型所以需要强转
	 */
	@Test
	public void getBeanName() {

		UserAction user = (UserAction) getContext().getBean("userAction");
		user.Save();

	}

	/**
	 * 3. 得到带参数的构造函数
	 */
	@Test
	public void getUserAction() {

		UserAction user = getContext().getBean(UserAction.class);
		user.Save();

	}

}
